package org.wsff.tools.api.gateway.error;

import org.wsff.tools.api.gateway.i18n.AbstractMessageFactory;
import org.wsff.tools.api.gateway.i18n.Message;

/**
 * 错误工厂抽象类
 *
 * @author ryan
 * @version Id: AbstractErrorMessageFactory.java, v 0.1 2022-01-18 16:21 ryan Exp $$
 */
public abstract class AbstractErrorMessageFactory extends AbstractMessageFactory {

    private static final String BUNDLE_ERROR_SUFFIX = "-error";

    /**
     * 获取资源文件名称，资源文件名称是不包含[messages]后缀，和文件扩展类型
     * 通过提供的资源文件名称，消息工厂计算出资源文件完整路径
     *
     * 资源文件路径：
     * <code>META-INF/messages/bundleName-messages.properties</code>
     *
     * @return 返回资源文件名称
     */
    @Override
    protected String provideBundleName() {
        return provideErrorBundleName() + BUNDLE_ERROR_SUFFIX;
    }

    /**
     * 创建错误消息对象
     *
     * @param errorCode 错误代码
     * @param message 错误描述
     * @return 错误消息
     */
    public static GatewayError createStaticError(String errorCode, String message) {
        return new GatewayError(errorCode, message);
    }

    /**
     * 创建错误消息对象
     *
     * @param message 错误描述
     * @return 错误消息
     */
    public static GatewayError createStaticError(String message) {
        return new GatewayError(message);
    }

    /**
     * 从错误消息描述资源文件中根据错误代码创建错误消息对象
     *
     * @param errorCode 错误代码
     * @param args 错误消息占位符参数
     * @return 错误消息
     */
    protected final GatewayError createError(String errorCode, Object... args) {
        Message msg = getMessage(errorCode, args);
        return new GatewayError(errorCode, msg.getMessage(), args);
    }

    /**
     * 获取错误消息资源文件名称，资源文件名称是不包含[error-messages]后缀，和文件扩展类型
     * 通过提供的错误消息资源文件名称，消息工厂计算出资源文件完整路径
     *
     * 资源文件路径：
     * <code>META-INF/messages/bundleName-error-messages.properties</code>
     *
     * @return 错误消息资源文件名称
     */
    protected abstract String provideErrorBundleName();
}
